package main

import "fmt"

/**
值传递 指针传递
 */
func main() {
	a, b := 1, 2
	fmt.Printf("main a:%d b:%d \n", a, b)

	swap(a, b)
	fmt.Printf("main a:%d b:%d \n", a, b)

	swap_pointer(&a, &b)
	fmt.Printf("main a:%d b:%d \n", a, b)

	add1(a, b)
	fmt.Printf("main a:%d b:%d \n", a, b)

	add1_pointer(&a, &b)
	fmt.Printf("main a:%d b:%d \n", a, b)
}

//变量通过参数带入函数,通过变量不会直接被处理返回到main
func swap(i int, j int) {
	i, j = j, i
	fmt.Printf("swap a:%d b:%d \n", i, j)
}
func add1(i int, j int) {
	i, j = i+1, j+1
	fmt.Printf("add1 a:%d b:%d \n", i, j)
}

//变量通过参数带入函数,通过变量不会直接被处理返回到main
/**
 java可以通过参数带入函数直接被改变
 go有指针,直接把变量带入函数,函数体内是新的内存空间,希望可以让原变量内存改变返回
到main中, 需要吧参数指针带入函数
*/
func swap_pointer(a, b *int) {
	*a, *b = *b, *a
	fmt.Printf("swap_pointer a:%d b:%d \n", *a, *b)
}
func add1_pointer(a, b *int) {
	*a, *b = *a+1, *b+1
	fmt.Printf("add1_pointer a:%d b:%d \n", *a, *b)
}
